package metier;

import java.util.ArrayList;
import java.util.List;

import dao.ProduitDAO;
import factories.FactoryProduitDAO;

public class Catalogue {

	private ArrayList<Produit>	produits;
	private ProduitDAO pdao;
	
	public Catalogue ()
	{
		produits = new ArrayList<Produit> ();
		pdao = FactoryProduitDAO.getInstance().createProduitDAO(FactoryProduitDAO.methode.XML);
		read_all (pdao.find_all());
	}
	
	public boolean add (Produit p)
	{
		boolean resultat = false;
		if (!produits.contains (p)) {
			resultat = produits.add(p);
			pdao.create (p);
		}
		return resultat;
	}
	
	public boolean add (List<Produit> plist)
	{
		Produit p = null;
		for (int i = 0; i < plist.size (); i++) {
			p = plist.get (i);
			if (!contenir (p.getNom())) {
				produits.add(p);
				pdao.create (p);
			}
		}
		/* FIXME: harcoded true */
		return true;
	}
	
	public boolean read_all (List<Produit> plist)
	{
			Produit p = null;
			for (int i = 0; i < plist.size (); i++) {
				p = plist.get (i);
				produits.add(p);
			}
			/* FIXME: harcoded true */
			return true;
	}
	
	public boolean add (String nom, float prix, int quantite)
	{
		boolean resultat = false;
		Produit p = new Produit (nom, prix, quantite);
		if (!contenir(nom)) {
			System.out.println ("Produit unique!");
			resultat = produits.add(p);
			pdao.create(p);
		} else {
			System.out.println ("Existe déjà!");
		}
		return resultat;
	}
	
	public boolean remove (String nom)
	{
		boolean success = false;
		Produit p;
		for (int i = 0; i < produits.size (); i++) {
			p = produits.get (i);
			if (p.getNom () == nom) {
				success = produits.remove (p);
				pdao.delete(p);
			}
		}
		return success;
	}
	
	public boolean acheter( String nom, int qte)
	{
		boolean success = false;
		Produit p;
		for (int i = 0; i < produits.size (); i++) {
			p = produits.get (i);
			if (p.getNom () == nom) {
				p.ajouter(qte);
				pdao.update (p);
				success = true;
			}
		}
		return success;
	}
	
	public boolean vendre (String nom, int qte)
	{
		boolean success = false;
		Produit p;
		for (int i = 0; i < produits.size (); i++) {
			p = produits.get (i);
			if (p.getNom () == nom) {
				p.enlever(qte);	
				pdao.update (p);
				success = true;
			}
		}
		return success;
	}
	
	public String[] nomProduits ()
	{
		String []noms = new String[produits.size()];
		Produit p;
		for (int i = 0; i < produits.size (); i++) {
			p = produits.get (i);
			noms[i] = p.getNom ();
		}
		return noms;
	}
	
	public float montantTotalTTC ()
	{
		float total = 0;
		Produit p;
		for (int i = 0; i < produits.size (); i++) {
			p = produits.get (i);
			total += p.getPrixStockTTC ();
		}
		return total;
	}
	
	public String to_string ()
	{
		Produit p;
		String msg = "Le catalogue contient :\n";
		for (int i = 0; i < produits.size (); i++) {
			p = produits.get (i);
			msg += p.to_string ();
		}
		return msg;
	}
	
	public boolean contenir (String nom)
	{
		int i = 0;
		boolean found = false;
		while (i < produits.size () && !found) {
			if (produits.get(i).getNom().compareTo(nom) == 0) {
				found = true;
			}
			i++;
		}
		return (found);
	}
}